package com.qingzhou.framework.impl;

import cn.hutool.core.util.ArrayUtil;
import com.qingzhou.common.utils.SecurityUtil;
import org.noear.solon.auth.AuthProcessor;
import org.noear.solon.auth.annotation.Logical;

/**
 * 鉴权处理器
 *
 * @author xm
 */
@SuppressWarnings("LombokSetterMayBeUsed")
public class AuthProcessorImpl implements AuthProcessor {

    /** IP黑名单 */
    private String[] ipBlackList;

    public void setIpBlackList(String[] ipBlackList) {
        this.ipBlackList = ipBlackList;
    }

    /** 验证IP，是否有权访问 */
    @Override
    public boolean verifyIp(String ip) {
        return !ArrayUtil.contains(ipBlackList, ip);
    }

    /**
     * 验证登录状态
     */
    @Override
    public boolean verifyLogined() {
        return SecurityUtil.isLogin();
    }

    /**
     * 验证路径（一般使用路径验证）
     *
     * @param path   路径
     * @param method 请求方式
     */
    @Override
    public boolean verifyPath(final String path, final String method) {
        return true;
    }

    /**
     * 验证特定权限（有特殊情况用权限验证, verifyLogined为 true，才会触发）
     *
     * @param permissions 权限
     * @param logical     认证的逻辑关系
     */
    @Override
    public boolean verifyPermissions(final String[] permissions, final Logical logical) {
        return SecurityUtil.hasPermission(permissions, Logical.AND == logical);
    }

    /**
     * 验证特定角色（有特殊情况用角色验证, verifyLogined为 true，才会触发）
     *
     * @param roles   角色
     * @param logical 认证的逻辑关系
     */
    @Override
    public boolean verifyRoles(final String[] roles, final Logical logical) {
        return SecurityUtil.hasRole(roles, Logical.AND == logical);
    }
}
